19-2 v僈PCL

MATLAB 在顯示影像時,會將之置於預設的圖軸之中,並以此圖軸的長寬比來成像,因而造成影像的失真。若要以影像本身的長寬比來成像,可加入 axis image,如下:

Example 1: 19-影像顯示與讀寫/image05.mload mandrill.mat image(X); colormap(map); colorbar; axis image

在上述範例中,如果不使用「axis image」,那麼畫出來的圖的大小就是 MATLAB 的預設圖軸的大小,所以會得到一個比例不對的「胖猴子」。(如果此時你去改變視窗大小,就可以看到圖形的比例也會跟著改變。)

若要使影像資料的每一點對應至螢幕上的一個像素(Pixel),可輸入如下:

Example 2: 19-影像顯示與讀寫/image06.mload mandrill.mat [m, n] = size(X); figure ('unit', 'pixel', 'position', [200, 200, n, m]); image(X); colormap(map); set(gca, 'position', [0, 0, 1, 1]);

此範例產生圖形如同前一個範例,但是影像資料的每一點可以對應到螢幕上的一個像素,所以如果你的螢幕解析度較低,圖形會變大。在上述範例程式碼中, figure 的 'position' 性質為 [200, 200, n, m],代表視窗的左下角位置是 [200, 200](以 pixel 為單位),而視窗的寬度為 n,高度為 m,正好可以符合影像的大小。gca 傳回使用中的圖軸,上例的最後一個敘述將圖軸的位置設為整個視窗的大小,使用了正規化的單位(Normalized Unit)。(有關於 gca 及 set 指令,請詳見本書第七章「握把式圖形與 GUI 設計」。)

Hint
此節用到了許多握把式圖形(Handle Graphics)的功能,若要知道更多的細節,可參考本書第七章「握把式圖形與 GUI 設計」。

在列印影像時,MATLAB 會根據視窗的 Paper position 性質來調整圖形的長寬比,使得印出的影像再度變形。欲防止情況,可下達一列指令:

>>set(gcf, 'PaperPositionMode', 'auto')

即可印出正常的影像。其中 gcf 傳回使用中的視窗,將“Paper Position Mode”設為“auto”,則在列印時列印出的長寬比會和顯示在螢幕的長寬比一樣。

若要使 Paper Position Mode 的預設值就是“auto”,可在 startup.m 檔案中加入下一行:

>>set(0, 'DefaultFigurePaperPositionMode', 'auto')
MATLAB程式設計:入門篇